<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>es10</title>
</head>

<body>
  <script type="module">
    /**
    es7
    幂运算 **
   */
    console.log(3 ** 2) //9
    console.log(3 ** 3) //27

    /**
     *  BigInt
     * 在数字末尾加n就可以计算超大数字了
     */
    var num = 130728199504121451n
    num++
    console.log(num)

    /**
     * 动态引入 import
     * 允许JS文件作为一个模块动态的引入到应用中
     */
    // const module = await import("./...")

    /**
     * 合并空值 ??
     * 
     */
    // console.log(false ?? "aaa") //false
    // console.log(null ?? "aaa") // 'aaa'
    // console.log(undefined ?? "aaa") //'aaa'
    // console.log("" ?? "aaa") //""
    // console.log(NaN ?? "aaa") //NaN

    /**
     * 可选链
     * 可选链语法允许你访问嵌套更深的对象属性，
     * 而不用担心属性是否存在。如果，存在很好。
     * 反之，会返回 undefined。
     */
    // var x = {
    //   a: 1,
    //   b: {
    //     c: 2
    //   }
    // }
    // console.log(x.a?.c) // undefined
    // console.log(x.b?.c) // 2
    // console.log(x.b?.c?.d) // undefined

    /**
     * Promise.allSettled
     * 方法接收一组 Promise，
     * 并且会返回所有的结果 
     * 而不管是 resolved 还是 rejected。
    */
    const promiseArr = [
      Promise.resolve(100),
      new Promise(res=>{
        setTimeout(()=>{
          console.log(111)
          res('set')
        },3000)
      }),
      new Promise(res=>{
        setTimeout(()=>{
          console.log(222)
          res('set2')
        },2000)
      }),
      Promise.resolve('aaa'),
      Promise.reject("200"),
    ]
    //先打印 222 后打印 111
    // 执行循序遵循异步队列机制
    // 但是返回的res数组和传入的数组是一一对应的顺序
    Promise.allSettled(promiseArr).then(res=>{
      // console.log(JSON.stringify(res))
      console.log(res)
      /**
       * [
       *  {"status":"fulfilled","value":100},
       *  {"status":"fulfilled","value":"aaa"},
       *  {"status":"rejected","reason":"200"}
       * ]
      */
    })

    /**
     *  matchAll
     * 见 basics/css,js/String.html
     * 
    */

    /**
     * globalThis 对象
     * 所有平台下的js全局变量（window,global）
    */

    /**
     *  import.meta
     * 给 script 标签添加 type='module'
     * <script type="module"><\/script>
     * 获取到模块的路径地址
    */
   console.log(import.meta) 
   //{url: "file:///F:/study/reviewProfile/basics/other/es10.html"}
  </script>
</body>

</html>